package main

import (
	"fmt"
	"reflect"
)

// 使用new创建变量
func main() {
	p := new(int)                         // p, *int 类型, 指向匿名的 int 变量
	fmt.Println(p, reflect.TypeOf(p), *p) // 0xc00001c0a8 *int 0

	*p = 2                                // 设置 int 匿名变量的值为 2
	fmt.Println(p, reflect.TypeOf(p), *p) // 0xc00001c0a8 *int 2

	// 匿名变量赋值给变量pp【只是赋值，内部其实重新分配了内存地址，pp与p已经没有引用关系了】
	pp := *p
	fmt.Println(pp, reflect.TypeOf(pp), &pp) // 2 int 0xc00001c0e0

	// 修改pp的值
	pp = 3
	fmt.Println(pp, reflect.TypeOf(pp), &pp) // 3 int 0xc00001c0e0
	// p指针没有发生变化
	fmt.Println(p, reflect.TypeOf(p), *p) // 0xc0000a6058 *int 2

}
